#include <iostream>
#include <vector>
using namespace std;

// 欧拉筛算法
// 参考OI Wiki：https://oi-wiki.org/math/number-theory/sieve/
int eulerGetPrimesCnt(int target) {
    int result = 0;
    bool isPrimeList[target + 1]; // 质数信息
    vector<int> primes; // 质数表
    for (int i = 2; i <= target; i++) {
        if (!isPrimeList[i]) {
            primes.push_back(i);
            result++;
        }
        for (int p : primes) {
            if (p * i > target) break;
            isPrimeList[p * i] = 1; // 该数的倍数一定不是质数
            if (i % p == 0) break; // 之后不用筛了，因为那样的话不是使用其最小质因数
        }
    }
    return result;
}

int main() {
    int target; cin >> target;
    int result = eulerGetPrimesCnt(target);
    cout << result;
    return 0;
}